package com.scriptback.service;

import com.scriptback.dto.script.ScriptUpdateRequestDTO;
import com.scriptback.entity.Scripts;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;


/**
 * 脚本服务接口
 */
@Service
public interface ScriptService {

    /**
     * 创建新脚本
     * @param projectId 所属项目ID
     * @param name 脚本名称
     * @param description 脚本描述
     * @param code 脚本代码
     * @return 创建的脚本对象
     */
    Scripts createScript(String projectId, String name, String description, String code);
    
    /**
     * 分页获取所有脚本
     * @param pageable 分页参数
     * @return 脚本分页结果
     */
    Page<Scripts> getAllScripts(Pageable pageable);
    
    /**
     * 分页获取指定项目下的脚本
     * @param projectId 项目ID
     * @param pageable 分页参数
     * @return 脚本分页结果
     */
    Page<Scripts> getScriptsByProjectId(String projectId, Pageable pageable);
    
    /**
     * 按名称搜索脚本
     * @param name 脚本名称关键字
     * @param pageable 分页参数
     * @return 匹配的脚本分页结果
     */
    Page<Scripts> searchScriptsByName(String name, Pageable pageable);
    
    /**
     * 在指定项目中按名称搜索脚本
     * @param projectId 项目ID
     * @param name 脚本名称关键字
     * @param pageable 分页参数
     * @return 匹配的脚本分页结果
     */
    Page<Scripts> searchScriptsByNameInProject(String projectId, String name, Pageable pageable);
    
    /**
     * 根据ID获取脚本
     * @param id 脚本ID
     * @return 脚本对象
     */
    Scripts getScriptById(String id);
    
    /**
     * 更新脚本信息
     * @param id 脚本ID
     * @param updateRequest 更新请求对象
     * @return 更新后的脚本对象
     */
    Scripts updateScript(String id, ScriptUpdateRequestDTO updateRequest);
    
    /**
     * 删除脚本
     * @param id 脚本ID
     */
    void deleteScript(String id);


}
